import sys
import os

sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))

from aws_model.athena_submit import submit
from config import hour_bucket
from sql_lambda.delete import delete
from base_class.inspect_logging import print_to_log
import datetime
import json
from aws_model.aws_stepfunc import send_task_success, send_task_failure


def ac_online_fault_agg(event):
    date = event.get('p_date')
    if not date:
        beijing = datetime.timezone(datetime.timedelta(hours=7))
        date = datetime.datetime.now(tz=beijing).strftime('%Y-%m-%d-%H')
    delete(hour_bucket, f'ads/ac_online_fault_agg/p_date={date}')
    table_name = sys._getframe().f_code.co_name
    sql = f'''insert into ads.ac_online_fault_agg
                (
                    select
                        sn,model,
                        max(province) as province,
                        max(city) as city,
                        array_join(array_distinct(array_agg(fault_class1)), ',') as fault_codes,
                        array_join(array_distinct(array_agg(fault_class1_name)), ',') as faults,
                        max(last_report_time) as last_report_time,
                        '{date}'
                    from
                        ads.ac_online_fault_record t
                    where
                        p_date = '{date}'
                    group by
                        sn,model
                )'''
    athena_response = submit(sql)
    print_to_log("athena_response: ", athena_response)
    output = {"msg": f"{table_name} submit ok", "Payload": {}}
    output = json.dumps(output)
    step_response = send_task_success(tasktoken, output)
    print_to_log("step_response: ", step_response)


if __name__ == '__main__':
    try:
        event = json.loads(sys.argv[1])
        tasktoken = event.get('TaskToken')
        ac_online_fault_agg(event)
    except Exception as e:
        print_to_log("athena_submit 失败")
        print_to_log("原因： ", str(e))
        send_task_failure(str(e), f'执行{sys._getframe().f_code.co_filename}错误', tasktoken)
